home *** CD-ROM | disk | FTP | other *** search
- Path: trib.apple.com!usenet
- From: Amir <Amir@bayarea.net>
- Newsgroups: comp.sys.lang.c++,comp.lang.c++
- Subject: Re: Help needed in C++ Function templates
- Date: Thu, 04 Apr 1996 11:23:13 -0700
- Organization: Apple Computer, Inc., Cupertino, California
- Message-ID: <31641391.2FCA@bayarea.net>
- References: <NEWTNews.828668110.2725.seedy@trigent.trigent.com>
- NNTP-Posting-Host: 17.128.203.75
- Mime-Version: 1.0
- Content-Type: text/plain; charset=us-ascii
- Content-Transfer-Encoding: 7bit
- X-Mailer: Mozilla 2.01 (Macintosh; I; PPC)
-
- seedy@ultranet.com wrote:
- >
- > When attempted to compile the following code using GNU's g++ (ver. 2.7.1)
- > on HP-UX, I got the following error :
- >
- > news.cc: In function `int equal(const class abc &, const class abc &)':
- > news.cc:23: no match for `operator ==(class abc, class abc)'
- >
- > #include <iostream.h>
- >
- > class abc {
- > public :
- > abc( int x )
- > {
- > a = x;
- > b = 0;
- > }
- > int a;
- > int b;
- > inline int operator ==(abc x)
- > {
- > return ((a==x.a) && (b==x.b));
- > }
- > };
- >
- > template < class Element>
- > inline int equal (Element const& e1, Element const& e2)
- > {
- > return e1 == e2;
- >
- > }
- >
- > main()
- > {
- > abc a1(5), a2(5);
- >
- > cout << "Return value is = " << equal(a1, a2) << endl;
- > }
- >
- > Even though the 'operator ==' is overloaded in class abc, compiler is
- > reporting match not found. By making the overloaded function 'operator =='
- > as friend to 'class abc' I could resolve the problem, because in this case,
- > this overloaded function becomes outsider function.
- >
- > As far as I know, template instantiation for function 'equal will be done
- > for 'class abc'(because the passed parameters are of type class abc),
- > and so the corresponding member function 'operator ==' can be used for
- > template variables e1 and e2.
- >
- > Could any one explain why this error happens. Please send
- > your response via mail to 'seedy@trigent.com' or post it here.
- >
- > Cheers,
- >
- > Praveen.
-
- You are calling with const parameters a method that
- it's parameters are not const.
- change your operator== to:
-
- inline int operator ==(const abc & x) const
- {
- return ((a==x.a) && (b==x.b));
- }
-
- Amir
-
-
- --
- -- o o
- -----ooo---O---ooo-----------------------------------------
- -- Amir Deutel
- --
- -- Home: Amir@bayarea.net http://www.bayarea.net/~amir/
- -- Work: Amir_Deutel@powertalk.apple.com
-